package instance;

import java.util.Iterator;
import java.util.LinkedList;

public class InstanceResultado {
	/* LOS CICLOS NO INCLUYEN AL NODO ORIGEN */
	/* Los nodos van desde 0 hasta n-1 */
	private LinkedList<Integer> primer_ciclo;
	private LinkedList<Integer> segundo_ciclo;
	private int nodo_origen;

	public InstanceResultado() {
		/* LOS CICLOS NO INCLUYEN AL NODO ORIGEN */
		primer_ciclo = new LinkedList<Integer>();
		segundo_ciclo = new LinkedList<Integer>();
	}
	
	public InstanceResultado(InstanceResultado inst) {
		/* LOS CICLOS NO INCLUYEN AL NODO ORIGEN */
		/* Los nodos van desde 0 hasta n-1 */
		this.primer_ciclo = new LinkedList<Integer>(inst.primer_ciclo);
		this.segundo_ciclo = new LinkedList<Integer>(inst.segundo_ciclo);
		this.nodo_origen = inst.nodo_origen;
	}
	
	public InstanceResultado(LinkedList<Integer> primer_ciclo, LinkedList<Integer> segundo_ciclo, int nodo_origen) {
		/* LOS CICLOS NO INCLUYEN AL NODO ORIGEN */
		/* Los nodos van desde 0 hasta n-1 */
		this.primer_ciclo = primer_ciclo;
		this.segundo_ciclo = segundo_ciclo;
		this.nodo_origen = nodo_origen;
	}

	public LinkedList<Integer> getPrimer_ciclo() {
		/* Los nodos van desde 0 hasta n-1 */
		/* LOS CICLOS NO INCLUYEN AL NODO ORIGEN */
		return primer_ciclo;
	}

	public void setPrimer_ciclo(LinkedList<Integer> primer_ciclo) {
		/* Los nodos van desde 0 hasta n-1 */
		/* LOS CICLOS NO INCLUYEN AL NODO ORIGEN */
		this.primer_ciclo = primer_ciclo;
	}

	public LinkedList<Integer> getSegundo_ciclo() {
		/* LOS CICLOS NO INCLUYEN AL NODO ORIGEN */
		return segundo_ciclo;
	}

	public void setSegundo_ciclo(LinkedList<Integer> segundo_ciclo) {
		/* Los nodos van desde 0 hasta n-1 */
		/* LOS CICLOS NO INCLUYEN AL NODO ORIGEN */
		this.segundo_ciclo = segundo_ciclo;
	}

	public int getNodo_origen() {
		return nodo_origen;
	}

	public void setNodo_origen(int nodo_origen) {
		this.nodo_origen = nodo_origen;
	}
	
	public int calcular_suma(InstanceTP3 inst) {
		int peso = 0;
		int w1, w2;
		
		LinkedList<Integer> c1 = this.getPrimer_ciclo();
		c1.addFirst(this.getNodo_origen());
		c1.addLast(this.getNodo_origen());
		
		LinkedList<Integer> c2 = this.getSegundo_ciclo();
		c2.addFirst(this.getNodo_origen());
		c2.addLast(this.getNodo_origen());

		Iterator<Integer> it, it2;
		
		it = c1.iterator();
		it2 = c1.iterator();
		it2.next();

		while(it2.hasNext()){
			w1 = it.next().intValue();
//			if(!it.hasNext()) break;
			w2 = it2.next().intValue();
			
//			peso += this.pesos[w1][w2];
			peso += inst.getPos(w1, w2);

		}
		
		it = c2.iterator();
		it2 = c2.iterator();
		it2.next();

		while(it2.hasNext()){
			w1 = it.next().intValue();
//			if(!it.hasNext()) break;
			w2 = it2.next().intValue();
			
//			peso += this.pesos[w1][w2];
			peso += inst.getPos(w1, w2);

			}
		
		return peso;
	}
	
	
	@Override
	public String toString() {
		return "InstanceResultado [primer_ciclo=" + primer_ciclo
				+ ", segundo_ciclo=" + segundo_ciclo + ", nodo_origen="
				+ nodo_origen + "]";
	}

}
